/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.cggveritas.crewintranet.migrationdb.access;

import fr.cggveritas.crewintranet.jms.dao.jpacontroller.CvDocofficielsJpaController;
import fr.cggveritas.crewintranet.jms.dao.jpacontroller.CvTravailleurJpaController;
import fr.cggveritas.crewintranet.jms.dao.jpacontroller.CvTravailJpaController;
import fr.cggveritas.crewintranet.jms.entities.CvDocofficiels;
import fr.cggveritas.crewintranet.jms.entities.CvTravailleur;
import fr.cggveritas.crewintranet.jms.entities.CvTravail;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Aissatou AGNE
 */
public class TestConnexionSGBDAccess {

    public static void main(String[] args) {
//        jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=c:/dba/personneldatabaseDZA3274.accdb;
        ConnexionSGDBMS connexionSGDBMS = new ConnexionSGDBMS(
                "jdbc:odbc:PERSONNELDZA3274;",
                "Admin",
                "3274DB");
        Connection con = null;
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// Connect with a url string
            con = DriverManager.getConnection(connexionSGDBMS.getUrl(), connexionSGDBMS.getUserName(), connexionSGDBMS.getPassword());
            Statement test = con.createStatement();
            test.execute("select * from PERSONNEL ");

            ResultSet res = test.getResultSet();
            List p1 = new ArrayList<PersonnelDataAccess>();
            PersonnelDataAccess p = new PersonnelDataAccess();
            if (res != null) {
                String GS = null;
                String fr = null;
                int i = 0;
                while (res.next() && i < 5) {

                    String tmp = res.getString("Groupe_Sanguin");

                    if (tmp != null) {
                        GS = separateur(tmp, "[a-zA-Z]{0,3}");
                        GS = GS.toUpperCase().replaceAll(" ", "");
                        fr = separateur(tmp, "[+-]");
                        fr = fr.toUpperCase().replaceAll(" ", "");
                    } else {
                        GS = "";
                        fr = "";
                    }
                    
                    p = new PersonnelDataAccess(
                            res.getString("ID_Personnel"),
                            res.getString("Forname"),
                            res.getString("Surname"),
                            res.getDate("Birth_Date"),
                            res.getString("ID_CARD"),
                            res.getString("Adresse"),
                            GS,
                            fr,
                            res.getDate("Employment_Date"),
                            res.getString("Comments"),
                            res.getString("Place_of_Birth"),
                            res.getString("Village"),
                            res.getString("Daira"),
                            res.getBytes("Photo")
                    );
                    System.out.println(p.getPrenom().toString());
                    p1.add(p);
                    p = new PersonnelDataAccess();
                    i++;
                }
            }

            System.out.println("Connection ok.");
            con.close();

            migrationDataBaseAccess(p1);
        } catch (Exception e) {
            System.err.println("Exception: " + e.getMessage());
        }

    }

    private static String separateur(String chaine, String expression) {
        Pattern pattern = Pattern.compile(expression);
        Matcher matcher = pattern.matcher(chaine);
        if (matcher.find()) {
            return matcher.group(0).toString();
        }
        return "";
    }

    public static void migrationDataBaseAccess(List<PersonnelDataAccess> pList) throws Exception {
        CvTravailleurJpaController cvTravailleurJpaController = new CvTravailleurJpaController();
        CvDocofficielsJpaController cvDocofficielsJpaController = new CvDocofficielsJpaController();
        CvTravailJpaController cvTravailJpaController = new CvTravailJpaController();

        try {
            for (PersonnelDataAccess personnelDataAccess : pList) {

                CvTravailleur cvTravailleur = new CvTravailleur();
                CvDocofficiels cvDocofficiels = new CvDocofficiels();
                CvTravail cvTravail = new CvTravail();
                cvTravailleur.setIDpersonne(Integer.parseInt(personnelDataAccess.getID_PERSONNEL()));
                cvTravailleur.setNom(personnelDataAccess.getNom());
                cvTravailleur.setPrenom(personnelDataAccess.getPrenom());
                cvTravailleur.setDatenaissance(personnelDataAccess.getBirthdate());
                cvTravailleur.setAdressederesidence(personnelDataAccess.getAdresse());
                cvTravailleur.setGroupesangin(personnelDataAccess.getGroupeSanguin());
                cvTravailleur.setFacteurrhesus(personnelDataAccess.getFacteurRhesus());
                cvTravailleur.setImageBlog(personnelDataAccess.getPhoto());
                cvDocofficiels.setNumerocardeidentite(personnelDataAccess.getID_Card());

                CvTravailleur testCvTravailleur = new CvTravailleur();
                testCvTravailleur = cvTravailleurJpaController.findCvTravailleurByIdPersonnel(Integer.parseInt(personnelDataAccess.getID_PERSONNEL()));

                if (testCvTravailleur.getId() == null) {
                    cvTravailleurJpaController.create(cvTravailleur);
                    cvDocofficiels.setCvTravailleurId(cvTravailleur);
                    cvTravail.setCvTravailleur(cvTravailleur);
                    cvDocofficielsJpaController.create(cvDocofficiels);
//                    cvTravailJpaController.create(cvTravail);
                }

            }
        } catch (Exception e) {
            System.err.println("Exception : " + e.getMessage());
        }

    }
}
